In most computing systems, low level instruction code is used as an intermediary between the hardware components of the computing system and the operating software and other high level software executing on the computing system. In some computer systems, this low level instruction code is known as the Basic Input and Output System (“BIOS”). The BIOS provides a set of software routines that allow high level software to interact with the hardware components of the computing system using standard calls.
Because of limitations of the BIOS in many PC-compatible computers, a new specification for creating the firmware that is responsible for booting the computer and for intermediating the communication between the operating system and the hardware has been proposed. The new specification is called the Extensible Firmware Interface (“EFI”) specification and is available from INTEL CORPORATION.
The EFI specification describes an interface between the operating system and the system firmware. In particular, the EFI specification defines the interface that platform firmware must implement and the interface that the operating system may use in booting. How the firmware implements the interface is left up to the manufacturer of the firmware. The EFI specification provides protocols for EFI drivers to communicate with each other, and the EFI core provides functions such as allocation of memory, creating events, setting the clock, and many others. This is accomplished through a formal and complete abstract specification of the software-visible interface presented to the operating system by the platform and the firmware.
The EFI is capable of providing services to other applications. Services are implemented by modules that may be loaded by a boot loader when the EFI is started. The services may provide memory management, domain services, driver services, protocol services, and others. Each of these services may have a need to store and retrieve various types of data records. In the past, each service was responsible for implementing its own mechanism for storing and retrieving data, typically a circular doubly linked list. However, requiring each service to implement its own mechanism for storing and retrieving data results in a duplication of effort among the various services. Moreover, searching a linked list can often be a slow operation as compared to other types of searches. Accordingly, there is a need for a method, system, and apparatus that can provide generic database services that may be utilized by programs executing within an EFI environment to store records having arbitrary data types.
It is with respect to these considerations and others that the various embodiments of the invention have been made.